AWS ParallelCluster でもSSH接続はやめて、セッションマネージャーで接続できます
AWS ParallelClusterはクラウドHPC環境を簡単に構築できるツールです。
AWS ParallelClusterで作成したクラスター環境にもAWS Systems Manager セッションマネージャーを利用できます。 ヘッドノード、コンピュートノードへのSSH接続を廃止し、よりセキュアなクラスター環境を構築してみましょう。
プライベートサブネットにクラスター環境構築する場合に特にオススメです。ログインノードにあたる踏み台サーバをなくせます。
結論
additional_iam_policies
の設定で必要なIAMポリシーを追加- SSM-Agentはデフォルトでインストール済み & サービス自動起動済み
- ParallelClusterのバージョンと、OSに依る部分なので都度確認した方がよい
- 自動生成されるIAMロールはヘッドノードと、コンピュートノードで共通
検証環境
項目 | 値 |
---|---|
ParallelCluster | 2.10.3 |
OS | Ubuntu 18.04 LTS |
AMI | aws-parallelcluster-2.10.3-ubuntu-1804-lts-hvm-x86_64-202103172101 |
Architecture | Intel |
HeadNode | t3.micro |
ComputeNode | c5.large |
セッションマネージャーの設定
ロギングの設定はしていません。
ParallelClusterの設定ファイル
additional_iam_policies
にセッションマネージャーで必要なIAMポリシー(AmazonSSMManagedInstanceCore)を指定します。
# v2.10.3 [aws] aws_region_name = us-east-1 [aliases] ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS} [global] cluster_template = default update_check = true sanity_check = true [cluster default] key_name = sandbox-key-useast1 scheduler = slurm # --- HeadNode Setting --- base_os = ubuntu1804 master_instance_type = t3.micro master_root_volume_size = 30 # --- Netowrk Setting --- vpc_settings = default # --- Compute Setting --- queue_settings = spot1 # --- IAM Policy--- additional_iam_policies = arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore # --- Tag --- tags = { "Name" : "Blog-Sample-ClusterSSM" } [vpc default] vpc_id = vpc-07edfc27679c9ca80 master_subnet_id = subnet-0ab2754446b2f87a4 compute_subnet_id = subnet-0ab2754446b2f87a4 use_public_ips = true # 検証用設定: パブリックサブネットで起動しているため [queue spot1] compute_resource_settings = spot1_resource placement_group = DYNAMIC compute_type = spot [compute_resource spot1_resource] instance_type = c5.large max_count = 16
クラスターを作成しました。
> pcluster create ssm-cluster -c ssm Beginning cluster creation for cluster: ssm-cluster Creating stack named: parallelcluster-ssm-cluster Status: parallelcluster-ssm-cluster - CREATE_COMPLETE MasterPublicIP: 99.99.99.99 ClusterUser: ubuntu MasterPrivateIP: 10.1.11.224
ヘッドノードのIAMロールを確認します。
自動生成されたIAMロールに設定ファイル内で指定したAmazonSSMManagedInstanceCore
ポリシーが追加されています。
ヘッドノード接続テスト
セッションマネージャーで接続してみます。
WEBブラウザからヘッドノードへログインできました。 キャプチャは文字が読みづらいため以降はテキストで説明します。
SSM-Agentはインストール済みでサービスは自動起動していました。そのため、IAMポリシー追加するだけでセッションマネージャーから接続できたわけです。
$ sudo systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service ● snap.amazon-ssm-agent.amazon-ssm-agent.service - Service for snap application amazon-ssm-agent.amazon-ssm-agent Loaded: loaded (/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-04-15 01:05:59 UTC; 6min ago Main PID: 883 (amazon-ssm-agen) Tasks: 34 (limit: 1099) CGroup: /system.slice/snap.amazon-ssm-agent.amazon-ssm-agent.service ├─ 883 /snap/amazon-ssm-agent/3552/amazon-ssm-agent ├─1147 /snap/amazon-ssm-agent/3552/ssm-agent-worker ├─1379 /snap/amazon-ssm-agent/3552/ssm-session-worker cm-ohmura.yasutaka-0c3bbbcb3143aab9b i-040aae658db141912 ├─1398 sh └─1636 sudo su - ubuntu --- 省略 ---
Ubuntuなので当初はPostinstall処理でSSM-Agentをインストールして起動させないといけないのかと思っていました。ひと手間省けてよかったです。
コンピュートノード接続テスト
まずテストジョブを投げてコンピュートノードを起動させます。
テストジョブの内容はSSM-Agentの状態を出力するだけです。
! /bin/bash sudo systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service
テストジョブを投げました。
$ sbatch -n1 test.sh Submitted batch job 2 $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot1* up infinite 1 mix# spot1-dy-c5large-1 spot1* up infinite 15 idle~ spot1-dy-c5large-[2-16] $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot1 test.sh ubuntu CF 0:09 1 spot1-dy-c5large-1
コンピュートノードの起動を待ちます。
しばらくするとキューからジョブがなくなっています。
$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
ヘッドノードに保存されたコンピュートノードの実行結果を確認します。コンピュートノードでもSSM-Agentが起動していることがわかりました。
● snap.amazon-ssm-agent.amazon-ssm-agent.service - Service for snap application amazon-ssm-agent.amazon-ssm-agent Loaded: loaded (/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-04-15 01:30:28 UTC; 2min 3s ago Main PID: 1082 (amazon-ssm-agen) Tasks: 20 (limit: 4391) CGroup: /system.slice/snap.amazon-ssm-agent.amazon-ssm-agent.service ├─1082 /snap/amazon-ssm-agent/3552/amazon-ssm-agent └─1471 /snap/amazon-ssm-agent/3552/ssm-agent-worker --- 省略 ---
コンピュートノードにもセッションマネージャーで接続ができました。接続先がコンピュートノードなのか分かりにくいのですがホスト名から識別できます。
ParallelClusterで自動生成のIAMロールについて
pcluster create
で作成したクラスター環境には自動生成のIAMロールがヘッドノードと、コンピュートノードに割り当てられます。IAMロールはヘッドノードと、コンピュートノードで共通です。
ヘッドノードのIAMロールと、コンピュートノードのIAMロールで異なるIAMロールを設定することはできません。
セッションマネージャー設定Tips
セッションマネージャーでSSH・SCPを使いたい
ローカル端末とヘッドノード間でファイルを転送したいことはよくあります。WEBブラウザからのログインだとファイル転送ができません。
セッションマネージャーのトンネル内でSSHやSCPコマンドを使うこともできます。設定すればSCPコマンドでヘッドノードにファイル転送ができます。
下記ブログを参考にしてください。
セッションマネージャーのエンドポイント
会社からだとセッションマネージャーで接続できない。
オンプレにHPC環境をお持ちの企業様は研究開発などを行っており、セキュリティに厳しいケースが多く見られます。プロキシサーバなどで社内セットワークからインターネットへ制限がある環境でしたら社内ネットワークも疑ってみてください。
ちなみに東京リージョンでのセッションマネージャーのエンドポイントは下記になります。プロキシサーバなどインターネットの出口を制限していないかご確認ください。
# HTTPSアクセスの許可が必要 ssm.ap-northeast-1.amazonaws.com
まとめ
additional_iam_policies
に必要なIAMポリシーを追記すると、自動生成されるIAMロールに追加したIAMポリシーが追加される。
IAMロールはヘッドノードと、コンピュートノードで共通であり、別々のIAMロールを設定することはできない。
おわりに
セッションマネージャーを使うとSSH接続を許可したセキュリティグループの設定が不要になります。不要にはなるのですが...クラスター作成時にデフォルトで作成されるセキュリティグループは以下のように全世界からSSH接続を許可した状態です。
パブリックサブネットにクラスター環境を作成する場合は、デフォルトのSSH接続許可を削除してセッションマネージャーのアクセスに寄せられないかご検討ください。